package com.bgs.travelapp.tourNote.service.impl;

import com.bgs.travelapp.fileManager.service.FileManagerService;
import com.bgs.travelapp.page.MyPageHelper;
import com.bgs.travelapp.page.PageRequest;
import com.bgs.travelapp.page.PageResult;
import com.bgs.travelapp.tourNote.eneity.TourNoteEntity;
import com.bgs.travelapp.tourNote.mapper.TourNoteMapper;
import com.bgs.travelapp.tourNote.service.TourNoteService;
import com.bgs.travelapp.util.MailUtils;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartRequest;
import tk.mybatis.mapper.entity.Example;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * hbx 2022年8月4日09:24:01
 * 前端我的主页游记添加  首页展示  我的主页展示+修改游记(前端)
 */
@Service
public class TourNoteServiceImpl implements TourNoteService {

    @Resource
    TourNoteMapper tourNoteMapper;

    @Resource
    FileManagerService fileManagerService;
    /**
     * 添加游记（前端）
     * hbx 2022-7-26 16:43:24
     * @param multipartRequest
     * @param tourNoteEntity
     * @return
     */
    @Override
    public Integer saveTourNote(MultipartRequest multipartRequest, TourNoteEntity tourNoteEntity) {
        MultipartFile file = multipartRequest.getFile("file");
        Integer fileId = 0;
        if(file!=null){
            fileId = fileManagerService.uploadReicText(multipartRequest);

        }
        tourNoteEntity.setFailureReason(null);
        tourNoteEntity.setCreateTime(new Date());
        tourNoteEntity.setCoverId(fileId);
        int i = tourNoteMapper.insertSelective(tourNoteEntity);
        return i;
    }

    /**
     *前端展示游记详情信息（前端）
     * hbx 2022年8月3日08:30:54
     * @param pageRequest
     * @return
     */
    @Override
    public PageResult getTourNoteAll(PageRequest pageRequest) {
//        Object o = redisUtil.get("pageEntity");
//        if (o == null){
//        TourNoteEntity tourNoteEntity = new TourNoteEntity();
//        Example example=new Example(TourNoteEntity.class);
//            example.createCriteria().andEqualTo("delFlag",0);
//            MyPageHelper.startPage(pageRequest);
          //  o = tourNoteMapper.selectByExample(example);
            //redisUtil.set("pageEntity" , o);
     //   }
        MyPageHelper.startPage(pageRequest);
        PageResult pageEntity = MyPageHelper.pageInfo( tourNoteMapper.getTourNoteAll());
        return pageEntity;
    }


    /**
     * 获取游记详情根据游记id（前端）
     * hbx 2022-8-3 14:45:54
     * @param id
     * @return
     */
    @Override
    public List<TourNoteEntity> getToueNoteById(Integer id) {
        TourNoteEntity tourNoteEntity = new TourNoteEntity();
        tourNoteEntity.setId(id);
        tourNoteEntity.setDelFlag(0);
        List<TourNoteEntity> select = tourNoteMapper.select(tourNoteEntity);
        return select;
    }

    /**
     * 点击查看游记详情时修改浏览量（前端展示）
     * hbx 2022年8月4日16:53:05
     * @param tourNoteEntity
     * @return
     */
    @Override
    public Integer updatetTourNote(TourNoteEntity tourNoteEntity) {
        int v = tourNoteEntity.getViews();
        tourNoteEntity.setViews(v+1);
        Integer id = tourNoteMapper.updateByPrimaryKeySelective(tourNoteEntity);
        return id;
    }

    /**
     * 前端我的主页展示游记信息 根据用户id（前端）
     * hbx 2022-8-15 08:45:13
     * @param userId
     * @return
     */
    @Override
    public List<TourNoteEntity> getTourNoteAlls(Integer userId) {
        TourNoteEntity tourNoteEntity = new TourNoteEntity();
        tourNoteEntity.setUserId(userId);
        tourNoteEntity.setDelFlag(0);
        List<TourNoteEntity> select = tourNoteMapper.select(tourNoteEntity);
        return select;
    }

    /**
     * 前端我的主页删除游记信息 根据游记id（前端）
     * hbx 2022-8-8 09:46:57
     * @param id
     * @return
     */
    @Override
    public Integer deleteTourNoteById(Integer id) {
        TourNoteEntity tourNoteEntity = new TourNoteEntity();
        tourNoteEntity.setId(id);
        tourNoteEntity.setDelFlag(1);
        int i = tourNoteMapper.updateByPrimaryKeySelective(tourNoteEntity);
        return i;
    }

    /**
     *前端我的主页修改游记信息（前端）
     * hbx 2022年8月8日14:17:53
     * @param multipartRequest
     * @param tourNoteEntity
     * @return
     */
    @Override
    public Integer updateTourNoteById(MultipartRequest multipartRequest, TourNoteEntity tourNoteEntity) {
        MultipartFile file = multipartRequest.getFile("file");
        Integer fileId = 0;
        if(file!=null){
            fileId = fileManagerService.uploadReicText(multipartRequest);
            tourNoteEntity.setCoverId(fileId);
        }
        tourNoteEntity.setReleaseTypeId(1);
        tourNoteEntity.setCreateTime(new Date());
        Integer id = tourNoteMapper.updateByPrimaryKeySelective(tourNoteEntity);
        return id;
    }

    /**
     * 根据城市id查询游记信息
     * hbx 2022年8月12日09:25:02
     * @param pageRequest
     * @param cityId
     * @return
     */
    @Override
    public PageResult getTourNoteAllByCityId(PageRequest pageRequest, Integer cityId) {
        MyPageHelper.startPage(pageRequest);
        PageResult pageEntity = MyPageHelper.pageInfo( tourNoteMapper.getTourNoteAllByCityId(cityId));
        return pageEntity;
    }


    /**
     * 全查游记信息  分页（后端）
     * hbx 2022年8月18日15:38:13
     * @param pageRequest
     * @return
     */
    @Override
    public PageResult getTravelsAll(PageRequest pageRequest) {
        Example example=new Example(TourNoteEntity.class);
        example.createCriteria().andEqualTo("delFlag",0);
        MyPageHelper.startPage(pageRequest);
        List<TourNoteEntity> tourNoteEntities =tourNoteMapper.selectByExample(example);
        PageResult pageEntity = MyPageHelper.pageInfo(tourNoteEntities);
        return pageEntity;
    }



    /**
     * 根据游记id删除游记信息（后端）
     * hbx 2022年8月18日16:09:58
     * @param id
     * @return
     */
    @Override
    public Integer deleteTravelsById(Integer id) {
        TourNoteEntity tourNoteEntity = new TourNoteEntity();
        tourNoteEntity.setId(id);
        tourNoteEntity.setDelFlag(1);
        int i = tourNoteMapper.updateByPrimaryKeySelective(tourNoteEntity);
        return i;
    }

    /**
     * 分页 根据条件模糊查询游记信息（后端）
     * hbx 2022年8月19日09:32:13
     * @param pageRequest
     * @param title
     * @param author
     * @param createTime
     * @return
     */
    @Override
    public PageResult getTravelsVague(PageRequest pageRequest, String title, String author,String createTime,String releaseTypeId) {
        Example example = new Example(TourNoteEntity.class);
        Example.Criteria criteria = example.createCriteria();
        criteria.andLike("releaseTypeId","%"+releaseTypeId+"%").andLike("createTime","%"+createTime+"%")
                .andLike("title","%"+title+"%").andLike("author","%"+author+"%").andEqualTo("delFlag",0);
        MyPageHelper.startPage(pageRequest);
        List<TourNoteEntity> tourNoteEntities = tourNoteMapper.selectByExample(example);
        PageResult pageEntity = MyPageHelper.pageInfo(tourNoteEntities);
        return pageEntity;
    }

    /**
     * 修改游记审批状态（后端）
     * hbx 2022年8月22日10:56:48
     * @param tourNoteEntity
     * @return
     */
    @Override
    public Integer updateTourNoteType(TourNoteEntity tourNoteEntity) {
        return tourNoteMapper.updateByPrimaryKeySelective(tourNoteEntity);
    }

    /**
     * 修改发布滑块信息 (后端)
     * hbx 2022年8月22日11:32:49
     * @param tourNoteEntity
     * @return
     */
    @Override
    public Integer updateOpenPrivate(TourNoteEntity tourNoteEntity) {
        Integer id = null;
        if (tourNoteEntity.getReleaseTypeId() == 3){
             id = tourNoteMapper.updateByPrimaryKeySelective(tourNoteEntity);
        }
        return id;
    }

    /**
     * 将审批失败原因通过邮箱发送给用户（后端管理）
     * hbx 2022年8月23日09:19:16
     * @param mail
     */
    @Override
    public void emailReply(String mail,Integer id) {
        TourNoteEntity tourNoteEntity = new TourNoteEntity();
        tourNoteEntity.setId(id);
        tourNoteEntity.setDelFlag(0);
        List<TourNoteEntity> select = tourNoteMapper.select(tourNoteEntity);
        for(TourNoteEntity tourNote :select){
//           String title =  tourNote.getTitle();
//           String failureReason = tourNote.getFailureReason();
            String subjuect = "您好，您所发布的游记 " + "《" + tourNote.getTitle() + "》" + "审批失败";
            String text = "您所发布的游记" + "《" + tourNote.getTitle()+ "》" + "审批失败的原因：" + tourNote.getFailureReason();
            MailUtils.sendMail(mail,subjuect,text);
        }
    }


}
